package com.newtouch.bxzs.business.message.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.newtouch.bxzs.business.message.model.NotificationBO;
import com.newtouch.bxzs.business.message.model.bo.*;
import com.newtouch.bxzs.business.message.model.vo.GetNotificationListVO;
import com.newtouch.bxzs.common.base.model.Notification;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
import java.util.List;

/**
 * 通知信息的返回参数Mapper接口
 *
 * <p>
 * <b>History:</b>
 * <table border="1">
 * <tr>
 * <th>Date</th>
 * <th>Operator</th>
 * <th>Memo</th>
 * </tr>
 * <tr>
 * <td>2020年12月14日</td>
 * <td>liman</td>
 * <td>Create</td>
 * </tr>
 * </table>
 *
 * @author liman
 * @version 1.0.0
 * @since 1.0.0
 */
@Mapper
public interface NotificationMapper extends BaseMapper<Notification> {

    /**
     * 查询tc端通知列表
     *
     * @param page                  分页参数
     * @param getNotificationListVO 查询参数
     * @return IPage<NotificationBO>
     */
    IPage<NotificationBO> getPcNotificationList(@Param("page") Page<NotificationBO> page, @Param("getNotificationListVO") GetNotificationListVO getNotificationListVO);

    /**
     * 按消息类型统计未读条数
     *
     * @param userId 用户id
     * @return List<UnReadCountByType>
     */
    List<UnReadCountByType> countUnreadByType(@Param("userId") String userId);

    /**
     * 查询app通知列表
     *
     * @param page             分页参数
     * @param userId           用户id
     * @param notificationType 消息分类
     * @return IPage<AppNotificationListBO>
     */
    IPage<AppNotificationListBO> selectNotificationList4App(@Param("page") Page<AppNotificationListBO> page,
                                                            @Param("userId") String userId,
                                                            @Param("notificationType") String notificationType);

    /**
     * 查询App端业务通知的类型
     *
     * @param userid 用户id
     * @return AppServiceNotifyTypeListBO
     */
    List<AppServiceNotifyTypeListBO> getAppServiceNotificationTypeList(@Param("userid") String userid);

    /**
     * 获取App端业务通知列表
     *
     * @param page                分页参数
     * @param userId              当前用户id
     * @param notificationSubtype 业务通知子类型
     * @return IPage<AppNotificationListBO>
     */
    IPage<AppNotificationListBO> getAppServiceNotificationList(@Param("page") Page<AppNotificationListBO> page,
                                                               @Param("userId") String userId,
                                                               @Param("notificationSubtype") String notificationSubtype);


    /**
     * PC端根据通知编号获取通知信息详情
     *
             * @param notificationId 通知id
     * @return 详情
     */
    NotificationDetailBO getPcNotificationDetail(@Param("notificationId") String notificationId);

    /**
     * App端根据通知id获取通知信息详情
     *
     * @param notificationId 通知id
     * @return AppNotificationDetailBO
     */
    AppNotificationDetailBO getAppNotificationDetail(@Param("notificationId") String notificationId);

    /**
     * 根据消息id删除中间表中的数据
     *
     * @param notificationId 消息id
     */
    @Update("UPDATE ASSISTANT_NOTIFICATION_USER_MAP SET IS_DELETE = 1 WHERE NOTIFICATION_ID = #{notificationId}")
    void deleteByNotificationId(@Param("notificationId") String notificationId);

    /**
     * 根据通知id获取接收人
     * @param notificationId 消息id
     * @return
     */
    List<ReceiveUserBO>getNotificationReceiveUser(String notificationId);
}